<?php
/**
 * 单例的用法
 */
class Db {
    public $name = 'lisi';
    public $age = 22;
    //1.实例属性私有化
    private static $db;
    //2.禁止构造方法被重写
    final private function __construct()
    {
        echo '有新的Db类的对象创建了<br/>';
    }
    //当有当前类的对象被克隆时调用
    private function __clone()
    {
        echo '有Db类的对象被克隆了';
    }
    //通过静态方法从外部访问
    public static function getInstance()
    {
        //return new self();//new Db(); 不建议
        if(self::$db==null && !(self::$db instanceof self)){
            self::$db = new self();
        }
        return self::$db;
    }
    public function getAge(){
        echo '<br/>我是test方法<br/>';
    }
}

// $db = new Db();
// $db1 = new Db();
$db = Db::getInstance();
echo $db->name,'<br/>';
$db1 = Db::getInstance();
var_dump($db1===$db);
$db->getAge();
//克隆出来的对象和被克隆对象具有相同的属性和方法
// $db2 = clone $db;
// if($db===$db2){
//     echo '克隆出的对象是同一个对象';
// }else{
//     echo '克隆出的对象不是同一个对象';
// }
var_dump($db1===$db);
